package BigInteger;

import java.math.BigInteger;
import java.util.Random;

public class bigInteger {
    public static void main(String[] args) {
        Big_Integer_method();
    }

    //    构造方法
    public static void Big_Integer() {
        //BigInteger对象一旦创建，其数值不可更改,不能直接运算
        BigInteger b1 = new BigInteger(4, new Random()); //生成 [0,2)^4-1 的数
        BigInteger b2 = new BigInteger("" + Long.MAX_VALUE + 1 + ""); //可表示超出Long范围的大数,但也不能太大
        BigInteger b3 = new BigInteger("101", 2); //进制数和进制 ，数必须对应进制，输出转换为十进制
        BigInteger b4 = BigInteger.valueOf(Long.MAX_VALUE + 1); //溢出 ,创建不同对象
        BigInteger b5 = BigInteger.valueOf(Long.MAX_VALUE);
        BigInteger b6 = BigInteger.valueOf(15); //当数字 -16~16 静态方法 valueof 创建同一对象
        BigInteger b7 = BigInteger.valueOf(15);
        System.out.println(b4 == b5); //比较地址
        System.out.println(b6 == b7); //比较地址
        System.out.println(b1.add(b2)); //运算后产生新的BigInteger对象

    }

    public static void Big_Integer_method() {
        //创建俩
        BigInteger b1 = BigInteger.valueOf(5);
        BigInteger b2 = new BigInteger("115");
        // add 加法
        BigInteger resultAdd = b1.add(b2);
        System.out.println(resultAdd);
//        subtract 减法
        BigInteger resultSubtract = b2.subtract(b1);
        System.out.println(resultSubtract);
//        multiply 乘法
        BigInteger resultMultiply = b1.multiply(b2);
        System.out.println(resultMultiply);
//        divide 除法
        BigInteger resultDivide = b2.divide(b1);
        System.out.println(resultDivide);
//        divideAndRemainder 求商和余数
        BigInteger[] bigIntegers = b2.divideAndRemainder(b1);
        System.out.println(bigIntegers[0] + " " + bigIntegers[1]);
//        equals 比较
        System.out.println(b1.equals(b2));
//        pow 次幂
        System.out.println(b1.pow(3));
//        max / min
        BigInteger max = b1.max(b2);
        BigInteger min = b1.min(b2);
        System.out.println(max + " " + min);
//        intValue
        int Intb2 = b2.intValue();
        System.out.println(Intb2);
    }
}
